import Vue from 'vue'

/***
 * 该文件为权限规则验证文件.
 * 里面包含了用户的权限管理所需的功能.
 */


/**
 * 是否拦截当前的router路径.拦截的话则返回false.可以通过this.$authority('*')形式调用
 * @param code
 * @return true 代表有权限访问; false代表无权限
 */
Vue.prototype.$authority  =  function hasAuthority(code) {
  if (this.$store.state.login.userInfo.userName ==="lbq"||this.$store.state.login.userInfo.userName ==='admin')
    return true;

  if(code === 'login'){
    return true;
  }
  let authList =  this.$store.state.role.authList;
  if(this.$store.state.login.userInfo.access===0){
    return true;
  }

  var self = this;
  //匹配功能性和页面级别
  let index =  this._.findIndex(authList,function(item) {
    return  item === code || item===(code+"/*");
  });

  if (index!==-1){
    return true;
  }

  return false ;
};

/**
 * 用户不具备查看table中某项数据权限时,我们会根据判断将标题声明数据置为null.
 * 该方法主要是为了将null从数组中移除.
 * @param titles
 * @returns {*}
 */
Vue.prototype.$authTableTitles = function (titles){

  for(var i = titles.length -1; i >= 0 ; i--){
    if(titles[i] === null ||titles[i]===undefined){
      titles.splice(i, 1);
    }
  }
  return titles;
} ;

/**
 * 注册一个类似于v-model的指令.
 * 方便用户可以通过v-has形式来控制显示与否.该方式相较于v-if来说,只需要渲染一次.效率高很多
 */
Vue.directive('has', {
  // 当值被绑定时,如果$authority调用后为false则移除该元素.
  inserted: function(el, binding) {
    if (!Vue.prototype.$authority(binding.value)) {
      el.parentNode.removeChild(el);
    }
  }
});
Vue.directive('mobile', {
  // 当值被绑定时,传递false则会在UI中移除该元素.
  inserted: function(el, binding) {
    var sUserAgent = window.navigator.userAgent;
    let isMobile = sUserAgent.indexOf('Android') > -1 || sUserAgent.indexOf('iPhone') > -1 || sUserAgent.indexOf('iPad') > -1 || sUserAgent.indexOf('iPod') > -1 || sUserAgent.indexOf('Symbian') > -1;
    if (!binding.value&&isMobile) {
      el.parentNode.removeChild(el);
    }
  }
});
Vue.directive('pc', {
  // 当值被绑定时,传递false则会在UI中移除该元素.
  inserted: function(el, binding) {
    var sUserAgent = window.navigator.userAgent;
    let isMobile = sUserAgent.indexOf('Android') > -1 || sUserAgent.indexOf('iPhone') > -1 || sUserAgent.indexOf('iPad') > -1 || sUserAgent.indexOf('iPod') > -1 || sUserAgent.indexOf('Symbian') > -1;
    if (!binding.value&&!isMobile) {
      el.parentNode.removeChild(el);
    }
  }
});
